package seqlist.oj;

public class Num021 {
    public ListNode removeNthFromEnd(ListNode head, int n) {
//        int size = 0;
//        ListNode node = head;
//        while (node != null) {
//            size++;
//            node = node.next;
//        }
//        if (n <= 0 || n > size) {
//            return null;
//        }
//
//        ListNode dummyHead=new ListNode(-1);
//        ListNode prev=dummyHead;
//        if(n==size){
//            prev.next=head.next;
//            head.next=null;
//        }
//        for (int i = 0; i < size-n; i++) {
//            prev=prev.next;
//        }
//        //此时prev就是待删除结点的前驱结点
//        ListNode node1=prev.next;
//        prev.next=node1.next;
//        node1.next=null;
//        return dummyHead.next;
        if(n<0||head==null){
            return head;
        }
       ListNode dummyHead=new ListNode(-1);
        dummyHead.next=head;
        ListNode low=dummyHead, fast=dummyHead;
        for (int i = 0; i < n; i++) {
            if(fast==null){
                return null;
            }
            fast=fast.next;
        }
        while(fast!=null && fast.next!=null){
            low=low.next;
            fast=fast.next;
        }
        //此时low是待删除结点的前驱结点
        ListNode node=low.next;
        low.next=node.next;
        node.next=null;
        return head;
    }
}